package me.zhengjie.modules.system.service;

import me.zhengjie.modules.system.domain.SafeRiskType;
import me.zhengjie.modules.system.service.dto.RecommendParam;
import me.zhengjie.modules.system.service.dto.SafeRiskTypeDto;
import me.zhengjie.modules.system.service.dto.SafeRiskTypeQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * SafeRiskTypeService
 *
 * @author guoyuan
 * @version 1.0.0
 * @since 1.0.0
 */
public interface SafeTestTypeService {
    /**
     * 新建
     *
     * @param resources 新增列表
     * @param parentId  父节点id
     */
    void create(List<SafeRiskTypeDto> resources, String parentId);

    /**
     * 不分页查所有
     *
     * @param criteria 查询条件
     * @return 结果列表
     * @throws Exception /
     */
    List<SafeRiskTypeDto> queryAll(SafeRiskTypeQueryCriteria criteria) throws Exception;

    /**
     * 查所有
     *
     * @return 结果列表
     */
    List<SafeRiskType> query();

    /**
     * 上传文件
     *
     * @param file 文件
     * @throws Exception /
     */
    void upload(MultipartFile file) throws Exception;

    /**
     * 删除安全类型
     *
     * @param id /
     */
    void delete(String id);

    /**
     * 修改类别
     *
     * @param riskTypeDto 原类别
     * @param parentId    父id
     */
    void edit(SafeRiskTypeDto riskTypeDto, String parentId);

    /**
     * 获取shuffle规则
     *
     * @param selects 已选场景风险类别列表
     * @return shuffle规则
     */
    Map<String, Object> getShuffleRules(List<SafeRiskTypeDto> selects);

    /**
     * 获取标签列表
     *
     * @return 标签列表
     */
    List<String> queryTags();

    /**
     * 智能推荐
     *
     * @param param    智能推荐参数
     * @param pageable 分页参数
     * @return 智能推荐案例分页数据
     */
    Map<String, Object> recommendItem(RecommendParam param, Pageable pageable);
}
